package ar.edu.untref.lp1.plomeria.helpers;

import org.junit.Assert;
import org.junit.Test;

import ar.edu.untref.lp1.plomeria.modelos.Material;

public class HelperParedDeMaterial {
	private int cantidadDeCaniosHorizontales = 0;
	private int coordenadasColumnas[];
	private int coordenadasFilas[];

	/**
	 * pre: recibe una valor de cantidad de columnas y otro de cantidad de
	 * filas.
	 * 
	 * post: retirna un array Material[][] lleno de ladrillos.
	 */
	public Material[][] getParedDeLadrillos(int i, int j) {

		Material[][] mapa = new Material[i][j];
		for (int columna = 0; columna < mapa.length; columna++) {
			for (int fila = 0; fila < mapa[0].length; fila++) {
				mapa[columna][fila] = Material.LADRILLO;
				// System.out.print("["+columna+","+fila+":"+mapa[columna][fila]+"]  ");
			}
		}
		return mapa;
	}

	/**
	 * Pre: Ingresa matriz de material
	 * 
	 * @param pared
	 *            Post: @return caño/s inicial, intermedios y final
	 */

	public Material[][] getCañosAleatorios(Material[][] mapa) {
		// Genero random para caño de ambos extremos
		int generoAleatorio = 0;
		generoAleatorio = (int) (Math.random() * mapa[0].length);
		mapa[0][generoAleatorio] = Material.CAÑO_HORIZONTAL;
		generoAleatorio = (int) (Math.random() * mapa[0].length);
		mapa[mapa.length - 1][generoAleatorio] = Material.CAÑO_HORIZONTAL;
		/*
		 * Analiza de manera horizontal, y columna por columna en posiciones
		 * pares, para colocar un caño horizontal si es que la columna contigua
		 * esta cubierta de ladrillos.
		 */
		for (int recorre = 2; recorre < mapa.length - 1; recorre++) {
			if (this.checkProximaColumna(mapa, recorre + 1)
					&& (recorre % 2 == 0)) {
				generoAleatorio = (int) (Math.random() * mapa[0].length);
				//System.out.println("[info]Recorre: " + recorre);
				//System.out.println("[info]nGen: " + generoAleatorio);
				mapa[recorre][generoAleatorio] = Material.CAÑO_HORIZONTAL;
			}
		}
		return mapa;
	}

	/**
	 * Pre: se ingresan parametros nombrados:
	 * 
	 * @param material
	 * @param coordenada
	 *            Post: @return si hay ladrillos en la columna contigua.
	 */
	private boolean checkProximaColumna(Material[][] material, int coordenada) {
		boolean hayLadrillo = true;
		for (int recorrido = 0; recorrido < material[coordenada].length
				&& hayLadrillo; recorrido++) {
			hayLadrillo = material[coordenada][recorrido] == Material.LADRILLO;
		}
		return hayLadrillo;
	}

	public void imprimeMatriz(Material[][] mapa) {
		for (int fila = 0; fila < mapa[0].length; fila++) {
			for (int columna = 0; columna < mapa.length; columna++) {

				System.out.print("[" + columna + ":" + fila + "|"
						+ mapa[columna][fila] + "] ");
			}
			System.out.println();
		}
		System.out.println();
	}
	
	public void imprimeUnElementoDeLaMatriz(Material[][] mapa,int columna,int fila){
		System.out.print("["+columna+":"+fila+">"+mapa[columna][fila]+"]");
	}
}
